-- 测试字符串指令
-- 用于字符串处理和内存操作

-- 测试1: MOVS 字符串复制
清除方向          -- CLD: 从低地址到高地址
移动 源索引，100  -- SI = 源地址
移动 目标索引，200 -- DI = 目标地址
移动 计数，10     -- CX = 字符串长度
移动字符串字节    -- MOVSB: 复制一个字节
-- 重复使用循环可以复制整个字符串

-- 测试2: CMPS 字符串比较
清除方向          -- CLD
移动 源索引，100  -- SI = 源字符串地址
移动 目标索引，200 -- DI = 目标字符串地址
移动 计数，10     -- CX = 字符串长度
比较字符串字节    -- CMPSB: 比较一个字节
不等于跳转 不相等 -- 如果不等，跳转

-- 测试3: SCAS 字符串搜索
清除方向          -- CLD
移动 目标索引，200 -- DI = 搜索目标地址
移动 累加器，65   -- AL = 'A' (ASCII 65)
移动 计数，10     -- CX = 搜索范围
扫描字符串字节    -- SCASB: 搜索一个字节
等于跳转 找到     -- 如果找到，跳转

-- 测试4: LODS 加载字符串
清除方向          -- CLD
移动 源索引，100  -- SI = 源地址
加载字符串字节    -- LODSB: 从 [SI] 加载到 AL
-- AL 现在包含 [SI] 的值，SI 自动递增

-- 测试5: STOS 存储字符串
清除方向          -- CLD
移动 目标索引，200 -- DI = 目标地址
移动 累加器，88   -- AL = 'X' (ASCII 88)
移动 计数，10     -- CX = 填充长度
存储字符串字节    -- STOSB: 从 AL 存储到 [DI]
-- [DI] 现在包含 AL 的值，DI 自动递增

-- 测试6: 字符串复制完整示例
字符串复制：
    清除方向      -- 设置方向（正向）
    移动 源索引，100 -- 源地址
    移动 目标索引，200 -- 目标地址
    移动 计数，10  -- 长度
复制循环：
    移动字符串字节 -- 复制一个字节
    自减 计数     -- CX--
    不等于循环 复制循环 -- 如果 CX != 0，继续循环

-- 测试7: 字符串填充示例
字符串填充：
    清除方向      -- 设置方向（正向）
    移动 目标索引，200 -- 目标地址
    移动 累加器，0 -- 填充值
    移动 计数，100 -- 填充长度
填充循环：
    存储字符串字节 -- 存储一个字节
    自减 计数     -- CX--
    不等于循环 填充循环 -- 如果 CX != 0，继续循环

-- 测试8: 字版本指令
清除方向
移动 源索引，100
移动 目标索引，200
移动字符串字      -- MOVSW: 复制一个字
比较字符串字      -- CMPSW: 比较一个字
扫描字符串字      -- SCASW: 搜索一个字
加载字符串字      -- LODSW: 加载一个字
存储字符串字      -- STOSW: 存储一个字

不相等：
找到：
空操作

